// 匹配更多类型的 URL 的正则表达式
const urlRegex = /((?:https?:\/\/)?(?:www\.)?[a-zA-Z0-9-]+(?:\.[a-zA-Z]{2,})+(?:\/[^\s\'"<>(){}[\]`]*)?)/gi;

// 存储找到的所有URL
let foundUrls = new Set();

// 验证域名的函数
function isValidDomain(url) {
    // 常见的顶级域名
    const commonTLDs = [
        'com', 'org', 'net', 'edu', 'gov', 'mil', 'io', 'cn',
        'uk', 'de', 'jp', 'fr', 'au', 'us', 'ru', 'ch', 'it',
        'nl', 'se', 'no', 'es', 'mil', 'biz', 'info'
    ];

    // 检查是否包含常见的顶级域名
    return commonTLDs.some(tld => url.includes('.' + tld));
}

// 遍历所有文本节点
function walkTextNodes(node) {
    // 跳过已处理的节点
    if (node.classList?.contains('highlighted-url-container')) {
        return;
    }

    // 跳过特定标签
    const skipTags = ['SCRIPT', 'STYLE', 'TEXTAREA', 'INPUT', 'NOSCRIPT'];
    if (node.nodeType === 1) {
        if (skipTags.includes(node.tagName)) {
            return;
        }
        // 如果是链接，直接添加到URL列表
        if (node.tagName === 'A' && node.href) {
            foundUrls.add(node.href);
            console.log('找到链接URL:', node.href);
            return;
        }
    }

    if (node.nodeType === 3) { // 文本节点
        const text = node.textContent;
        urlRegex.lastIndex = 0;

        if (urlRegex.test(text)) {
            urlRegex.lastIndex = 0;

            const span = document.createElement('span');
            span.classList.add('highlighted-url-container');

            // 替换文本中的 URL 为可点击的元素
            span.innerHTML = text.replace(urlRegex, (match) => {
                if (isValidDomain(match)) {
                    foundUrls.add(match);
                    console.log('找到文本URL:', match);
                    return `<span class="highlighted-url" data-url="${match}">${match}</span>`;
                }
                return match;
            });

            node.parentNode.replaceChild(span, node);
        }
    }

    // 递归处理子节点
    if (node.childNodes && node.childNodes.length > 0) {
        Array.from(node.childNodes).forEach(walkTextNodes);
    }
}

// 打印所有找到的URL
function printAllUrls() {
    console.log('=== 页面上找到的所有URL ===');
    console.log(`总共找到 ${foundUrls.size} 个URL:`);
    Array.from(foundUrls).forEach((url, index) => {
        console.log(`${index + 1}. ${url}`);
    });
    console.log('========================');
}

// 添加样式
function addStyles() {
    const style = document.createElement('style');
    style.textContent = `
        .highlighted-url {
            background-color: #fff3cd;
            padding: 2px 4px;
            border-radius: 3px;
            border: 1px solid #ffeeba;
            cursor: pointer;
            text-decoration: none;
            color: #0366d6;
            transition: all 0.2s ease;
            position: relative;
        }

        .highlighted-url:hover {
            background-color: #ffe7a0;
            text-decoration: underline;
            box-shadow: 0 1px 3px rgba(0,0,0,0.1);
            color: #044289;
        }

        .highlighted-url:active {
            background-color: #ffd700;
            transform: translateY(1px);
        }

        .highlighted-url::after {
            content: '🔗';
            font-size: 0.8em;
            margin-left: 4px;
            opacity: 0;
            transition: opacity 0.2s;
        }

        .highlighted-url:hover::after {
            opacity: 1;
        }
    `;
    document.head.appendChild(style);
}

// 处理点击事件
function handleUrlClick(event) {
    const target = event.target;
    if (target.classList.contains('highlighted-url')) {
        const url = target.dataset.url;
        if (url) {
            // 如果URL不包含协议，添加https://
            const fullUrl = url.includes('://') ? url : 'http://' + url;
            window.open(fullUrl, '_blank');
            event.preventDefault();
            event.stopPropagation();
        }
    }
}

// 主函数
function findAndHighlightUrls() {
    console.log('开始查找和高亮 URL...');
    try {
        // 清空之前找到的URL
        foundUrls.clear();

        // 添加样式
        addStyles();

        // 确保 body 存在
        if (document.body) {
            // 从 body 开始遍历
            walkTextNodes(document.body);

            // 打印找到的所有URL
            printAllUrls();

            // 添加点击事件监听器
            document.removeEventListener('click', handleUrlClick);
            document.addEventListener('click', handleUrlClick);

            console.log('URL 高亮处理完成');
        } else {
            console.log('body 元素不存在，等待DOM加载完成...');
        }
    } catch (error) {
        console.error('处理 URL 时出错:', error);
    }
}

// 确保在页面完全加载后执行
window.addEventListener('load', () => {
    console.log('页面完全加载完成，开始处理...');
    findAndHighlightUrls();
});

// 立即执行一次
if (document.readyState === 'complete') {
    console.log('页面已经加载完成，立即处理...');
    findAndHighlightUrls();
} else {
    console.log('等待页面加载...');
}

// 监听动态内容
const observer = new MutationObserver((mutations) => {
    let shouldUpdate = false;
    mutations.forEach((mutation) => {
        if (mutation.addedNodes.length) {
            shouldUpdate = true;
        }
    });

    if (shouldUpdate) {
        console.log('检测到DOM变化，重新处理...');
        findAndHighlightUrls();
    }
});

// 开始观察 DOM 变化
observer.observe(document.body, {
    childList: true,
    subtree: true,
    characterData: true
}); 